﻿/**
 * Create in 2012-4-1.
 */
package kit4j.common.collection.pool;

/**
 * 对象池接口。
 * 
 * @author MiniKnife
 * 
 * @param <T>
 *            对象池存储的对象类型
 */
public interface ObjectPool<T> {

	/**
	 * @return 当前对象池的对象提供者。
	 */
	public ObjectProvider<T> getObjectProvider();

	/**
	 * 设置当前对象池的对象提供者。
	 * @param provider 对象提供者
	 */
	public void setObjectProvider(ObjectProvider<T> provider);

	/**
	 * 从对象池中取用一个对象。
	 * @return 可被取用的对象。
	 */
	public T getObject();

	/**
	 * 返还一个对象到对象池中。如果返还的对象本不属于该对象池，则不进行任何操作。
	 * @param object 要返还的对象
	 */
	public void returnObject(T object);

	/**
	 * @return 当前对象池的容量。(容量=未被取用的对象数量+被取用对象数量)
	 */
	public int capacity();

	/**
	 * @return 当前对象池中未被取用的对象的数量。
	 */
	public int getFreeObjectCount();
	
	/**
	 * 销毁该对象池。
	 */
	public void destroy();

}
